﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using SmartSpace.Core.Util;
//using SmartSpace.Core.Data;
//using SmartSpace.Core.Metadata;
//using System.Data.Common;
//using SmartSpace.Core.Metadata.Workflow;

//namespace SmartSpace.Data
//{
//    public class DbScriptService : IDbScriptService
//    {
//        private DataFactory _contextFactory { get; set; }

//        public DbScriptService(DataFactory contextFactory)
//        {
//            _contextFactory = contextFactory;
//        }

//        public bool ToTable(EntityMetadata metadata)
//        {
//            using (SsDbContext context = _contextFactory.GetValue())
//            {
//                string scriptSql = DbScriptUtil.GetScript(metadata);
//                try
//                {
//                    context.Database.ExecuteSqlCommand(scriptSql);
//                    return true;
//                }
//                catch
//                {
//                    return false;
//                }
//            }
//        }

//        public System.Data.DataTable GetData(Guid id)
//        {
//            throw new NotImplementedException();
//        }

//        public bool Store(DetailData data)
//        {
//            using (SsDbContext context = _contextFactory.GetValue())
//            {
//                if (data.GetIdentity().GetOriginalValue() == null)
//                {
//                    throw new Exception("标识字段不能为空!");
//                }

//                if (Exsit(data, context))
//                {
//                    // 更新
//                    List<object> parameter = null;
//                    string scriptSql = DbScriptUtil.GetUpdateScript(data, out parameter);
//                    if (context.Database.ExecuteSqlCommand(scriptSql, parameter.ToArray()) > 0)
//                    {
//                        return true;
//                    }
//                }
//                else
//                {
//                    // 保存
//                    List<object> parameter = null;
//                    string scriptSql = DbScriptUtil.GetInsertScript(data, out parameter);
//                    if (context.Database.ExecuteSqlCommand(scriptSql, parameter.ToArray()) > 0)
//                    {
//                        return true;
//                    }
//                }
//                return false;
//            }
//        }

//        private bool Exsit(DetailData data, SsDbContext context)
//        {
//            bool isExist = false;
//            List<DbParameter> parameters = null;
//            System.Data.Common.DbCommand command = context.Database.Connection.CreateCommand();
//            string scriptSql = DbScriptUtil.GetExistScript(data, command, out parameters);
//            context.Database.Connection.Open();
//            command.CommandText = scriptSql;
//            command.CommandType = System.Data.CommandType.Text;
//            command.Parameters.AddRange(parameters.ToArray());
//            System.Data.Common.DbDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
//            while (reader.Read())
//            {
//                isExist = true;
//            }
//            reader.Close();
//            return isExist;
//        }


//        public ListData GetDatas(ActivityMetadata activity, int start, int limit)
//        {
//            using (SsDbContext context = _contextFactory.GetValue())
//            {
//                ListData list = new ListData();
//                list.Start = start;
//                list.Limit = limit;
//                list.Items = new List<SimpleData>();

//                try
//                {
//                    context.Database.Connection.Open();

//                    System.Data.Common.DbCommand command = context.Database.Connection.CreateCommand();

//                    List<DbParameter> parameters;
//                    string scriptSql = DbScriptUtil.GetPagedListScript(activity, command, start, limit, out parameters);
//                    command.CommandText = scriptSql;
//                    command.CommandType = System.Data.CommandType.Text;
//                    command.Parameters.AddRange(parameters.ToArray());
//                    using (System.Data.Common.DbDataReader reader = command.ExecuteReader())
//                    {
//                        while (reader.Read())
//                        {
//                            SimpleData item = new SimpleData();
//                            item.Fields = new List<FieldInstance>();

//                            foreach (SmartSpace.Core.Metadata.Workflow.FieldMetadata field in activity.ModuleView.Fields)
//                            {
//                                // 获取列表显示的字段，主键字段必须带上
//                                if (field.IsList || field.Property.IsIdentity)
//                                {
//                                    FieldInstance fieldData = new FieldInstance();
//                                    fieldData.SortIndex = field.SortIndex;
//                                    fieldData.Property = field.Property;
//                                    fieldData.SetValue(Convert.ToString(reader[field.Property.Name]));
//                                    item.Fields.Add(fieldData);
//                                }
//                            }

//                            list.Items.Add(item);
//                        }
//                    }
                    
//                    // 获取总数
//                    List<DbParameter> totalParameters = null;
//                    System.Data.Common.DbCommand totalCommand = context.Database.Connection.CreateCommand();
//                    string totalSql = DbScriptUtil.GetTotalScript(activity, totalCommand, out totalParameters);
//                    totalCommand.CommandText = totalSql;
//                    totalCommand.CommandType = System.Data.CommandType.Text;
//                    totalCommand.Parameters.AddRange(totalParameters.ToArray());
//                    using (System.Data.Common.DbDataReader totalReader = totalCommand.ExecuteReader())
//                    {
//                        if (totalReader.Read())
//                        {
//                           list.Total = Convert.ToInt32(totalReader["Count"]);
//                        }
//                    }
//                    //System.Data.Common.DbDataAdapter adapter = context.Database.Connection.pr
//                    //System.Data.DataTable result = command.
//                    return list;
//                }
//                catch
//                {
//                    return null;
//                }
//                finally
//                {
//                    context.Database.Connection.Close();
//                }
//            }
//        }
//    }
//}
